package erreAga.ws.service.impl;

import javax.jws.WebService;

import erreAga.dao.DaoException;
import erreAga.eb.Funcionario;
import erreAga.eb.HoraExtra;
import erreAga.service.ErreAgaService;
import erreAga.service.impl.ErreAgaServiceImpl;
import erreAga.ws.service.ErreAgaWebService;

@WebService(endpointInterface = "erreAga.ws.service.ErreAgaWebService", serviceName = "ErreAgaWebService")
public class ErreAgaWebServiceImpl implements ErreAgaWebService {

  @Override
  public String geraContracheque(String matriculaFuncionario, String mesAno) {
    String contracheque = "==CONTRACHEQUE================";
    Double bruto= new Double(0);
    Double liquido = new Double(0);
    ErreAgaService erreAgaService = new ErreAgaServiceImpl();
    try {
      Funcionario funcionario = erreAgaService
          .searchFuncionario(matriculaFuncionario);
      if (funcionario != null) {
        contracheque = contracheque + "Matricula: "
            + funcionario.getMatricula();
        contracheque = contracheque + " Nome: " + funcionario.getNome();
        contracheque = contracheque + "\nLotacao: " + funcionario.getLotacao();
        contracheque = contracheque + " Mes/Ano: " + mesAno;
        contracheque = contracheque + "\n==Vantagens";
        contracheque = contracheque + "\nSalario Base\t\t"
            + funcionario.getSalarioBase();
        bruto = bruto + funcionario.getSalarioBase();
        for (HoraExtra horaExtra : erreAgaService
            .listHoraExtra(matriculaFuncionario)) {
          contracheque = contracheque
              + "\nHoras Extras\t\t"
              + this.calculaHoraExtras(
                  horaExtra.getQuantidadeDiasChegadaAs8h(), horaExtra
                      .getQuantidadeDiasChegadaAs10h(), horaExtra
                      .getQuantidadeSabadosChegadaAs8h(), horaExtra
                      .getQuantidadeSabadosChegadaAs10h(), horaExtra
                      .getQuantidadeFolgasMes(), horaExtra
                      .getQuantidadeMinutosApos18h());
          bruto = bruto + this.calculaHoraExtras(
              horaExtra.getQuantidadeDiasChegadaAs8h(), horaExtra
              .getQuantidadeDiasChegadaAs10h(), horaExtra
              .getQuantidadeSabadosChegadaAs8h(), horaExtra
              .getQuantidadeSabadosChegadaAs10h(), horaExtra
              .getQuantidadeFolgasMes(), horaExtra
              .getQuantidadeMinutosApos18h());
        }
        liquido = bruto;
        contracheque = contracheque + "\n==Descontos";
        contracheque = contracheque + "\nImpost Renda\t\t"+(funcionario.getSalarioBase()*0.25);
        liquido = liquido - (funcionario.getSalarioBase()*0.25);
        contracheque = contracheque + "\nINSS        \t\t"+(funcionario.getSalarioBase()*0.11);
        liquido = liquido - (funcionario.getSalarioBase()*0.11);
        contracheque = contracheque + "\n===================";
        contracheque = contracheque + "\nSalar Bruto\t\t"+bruto;
        contracheque = contracheque + "\nSal Liquido\t\t"+liquido;

      }
    } catch (DaoException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return contracheque;
  }

  @Override
  public Integer calculaHoraExtras(Integer quantidadeDiasChegadaAs8h,
      Integer quantidadeDiasChegadaAs10h, Integer quantidadeSabadosChegadaAs8h,
      Integer quantidadeSabadosChegadaAs10h, Integer quantidadeFolgasMes,
      Integer quantidadeMinutosApos18h) {

    return ((1 * quantidadeDiasChegadaAs8h) - (1 * quantidadeDiasChegadaAs10h)
        + (4 * quantidadeSabadosChegadaAs8h)
        + (2 * quantidadeSabadosChegadaAs10h) - (8 * quantidadeFolgasMes))
        + (quantidadeMinutosApos18h / 60);
  }

}
